<<<<<<< .mine
package su.fishr.effects.flySquares 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import su.fishr.geom.CheckAngle;
	
	
	/**
	 *  По запросу "модели" нарезает переданное изображение
	 * на квадратные фрагменты, деля BitmapData либо на строки,
	 * либо на столбцы. 
	 * @author fish_r
	 */
	internal class CuttingFragments 
	{
	
	/**-------------------------------------------------------------------------------
	* 
	* 	
	* 
	*						V A R I A B L E ' S 	
	*
	* 
	* 
	* --------------------------------------------------------------------------------
	*/
		private static var _bitData:BitmapData;
		private static var _arrayFragments:Array;
		private static var _sizeFragment:uint;
		

	/**-------------------------------------------------------------------------------
	* 
	* 	
	* 
	*						S T A T I C ' S  	
	*
	* 
	* 
	* --------------------------------------------------------------------------------
	*/
		public static function CreationArray(obj:BitmapData, size:uint, distance:uint, rectShift:Rectangle, bomb:Boolean = false):Array
		{
			_arrayFragments = new Array();
			_sizeFragment = size;
			_bitData = obj;
			
			var countFr:int;
			var fragment:Bitmap;
			var fragmentData:BitmapData;
			var rect:Rectangle = new Rectangle(  0, 0, _sizeFragment, _sizeFragment );
			var arrFields:Array;
			var arrColumns:Array = new Array();
			var xP:Number = - _sizeFragment;
			var yP:Number;
			var pointMiddle:Point = new Point( _bitData.width / 2, _bitData.height / 2 );
			var radFromMiddle:Number;
			var pDispers:Point;
			

			///перебираем колонки
			do
			{
				xP += _sizeFragment;
				if ( xP + _sizeFragment > _bitData.width - 1 ) rect.width = _bitData.width - xP;
				yP = -_sizeFragment;
				rect.height = _sizeFragment;
				arrFields = new Array();
				
				
			
				///перебираем строки
				do
				{
					yP += _sizeFragment;

					if ( yP + _sizeFragment > _bitData.height - 1 ) rect.height = _bitData.height - yP;
					
					rect.x = xP;
					rect.y = yP;
					 
					try
					{
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					catch (e:Error)
					{
						 throw new Error( e +
								", Размер фрагмента : " + rect + ". Исключение создано в результате перегрузки плеера. " +
								 " Рекомендуется увеличить размер фрагмента" + 
								 ", последний фрагмент : "  + fragment );
						
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					
					if ( bomb === true )
					{
						radFromMiddle = CheckAngle.checkAngleToOwerObj( new Point( xP, yP  ), pointMiddle, true );
						pDispers = Point.polar(Math.random() * distance, radFromMiddle);

					}
					else
					{
						pDispers = Point.polar(Math.random() * distance   , (Math.random() * (Math.PI * 3)));
					}

					pDispers.x +=  xP;
					pDispers.y +=  yP;

					fragment.x = pDispers.x;
					fragment.y = pDispers.y;

					arrFields.push( [pDispers, xP + rectShift.x, yP + rectShift.y, fragment, radFromMiddle ] );

					countFr++;
				}
				while ( yP + _sizeFragment < _bitData.height )

				arrColumns.push(arrFields);

			}
			while ( xP + _sizeFragment < _bitData.width )
			
			return [arrColumns, countFr];
		}
		
		public static function CreationVerticalArray(obj:BitmapData, size:uint, distance:uint, rectShift:Rectangle, bomb:Boolean):Array
		{
			_arrayFragments = new Array();
			_sizeFragment = size;
			_bitData = obj;
			
			var countFr:int;
			var fragment:Bitmap;
			var fragmentData:BitmapData;
			var rect:Rectangle = new Rectangle(  0, 0, _sizeFragment, _sizeFragment );
			var arrFields:Array;
			var arrColumns:Array = new Array();
			var xP:Number = -_sizeFragment;
			var yP:Number = _bitData.height;
			var pointMiddle:Point = new Point( _bitData.width / 2, _bitData.height / 2 );
			var radFromMiddle:Number;
			var pDispers:Point;

			///перебираем колонки
			do
			{
				
				if ( yP - _sizeFragment <= 0 ) rect.height = yP;
				yP -= rect.height;
				xP = - _sizeFragment;
				rect.width = _sizeFragment;
				arrFields = new Array();
				
				
			
				///перебираем строки
				do
				{
					xP += _sizeFragment;
					

					if ( xP + _sizeFragment > _bitData.width - 1 ) rect.width = _bitData.width - xP;

					rect.x = xP;
					rect.y = yP;
					
					try
					{
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					catch (e:Error)
					{
						
						throw new Error( e +
								", Размер фрагмента : " + rect + ". Исключение создано в результате перегрузки плеера. " +
								 " Рекомендуется увеличить размер фрагмента" + 
								 ", последний фрагмент : "  + fragment );
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
						
						
					}
					if ( bomb === true )
					{
						radFromMiddle = CheckAngle.checkAngleToOwerObj( new Point( xP, yP  ), pointMiddle, true );
						pDispers = Point.polar(Math.random() * distance, radFromMiddle);
					}
					else
					{
						pDispers = Point.polar(Math.random() * (_bitData.width * 2.5 )   , (Math.random() * (Math.PI * 3)));
					}
					pDispers.x +=  xP;
					pDispers.y +=  yP;
					fragment.x = pDispers.x;
					fragment.y = pDispers.y;
					arrFields.push( [pDispers, xP + rectShift.x, yP + rectShift.y, fragment, radFromMiddle] );
					
					countFr++;
				}
				while ( xP + _sizeFragment < _bitData.width )

				arrColumns.push(arrFields);

			}
			while ( yP > 0 );
			
			
			return [arrColumns, countFr];
		}
		
		
		
		
		
	}

}=======
package su.fishr.effects.flySquares 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import su.fishr.geom.CheckAngle;
	
	
	/**
	 *  По запросу "модели" нарезает переданное изображение
	 * на квадратные фрагменты, деля BitmapData либо на строки,
	 * либо на столбцы. 
	 * @author fish_r
	 */
	internal class CuttingFragments 
	{
	
	/**-------------------------------------------------------------------------------
	* 
	* 	
	* 
	*						V A R I A B L E ' S 	
	*
	* 
	* 
	* --------------------------------------------------------------------------------
	*/
		private static var _bitData:BitmapData;
		private static var _arrayFragments:Array;
		private static var _sizeFragment:uint;
		

	/**-------------------------------------------------------------------------------
	* 
	* 	
	* 
	*						S T A T I C ' S  	
	*
	* 
	* 
	* --------------------------------------------------------------------------------
	*/
		public static function CreationArray(obj:BitmapData, size:uint, distance:uint, rectShift:Rectangle, bomb:Boolean = false):Array
		{
			_arrayFragments = new Array();
			_sizeFragment = size;
			_bitData = obj;
			
			var countFr:int;
			var fragment:Bitmap;
			var fragmentData:BitmapData;
			var rect:Rectangle = new Rectangle(  0, 0, _sizeFragment, _sizeFragment );
			var arrFields:Array;
			var arrColumns:Array = new Array();
			var xP:Number = - _sizeFragment;
			var yP:Number;
			var pointMiddle:Point = new Point( _bitData.width / 2, _bitData.height / 2 );
			var radFromMiddle:Number;
			var pDispers:Point;
			

			///перебираем колонки
			do
			{
				xP += _sizeFragment;
				if ( xP + _sizeFragment > _bitData.width - 1 ) rect.width = _bitData.width - xP;
				yP = -_sizeFragment;
				rect.height = _sizeFragment;
				arrFields = new Array();
				
				
			
				///перебираем строки
				do
				{
					yP += _sizeFragment;

					if ( yP + _sizeFragment > _bitData.height - 1 ) rect.height = _bitData.height - yP;
					
					rect.x = xP;
					rect.y = yP;
					 
					try
					{
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					catch (e:Error)
					{
						 throw new Error( e +
								", Размер фрагмента : " + rect + ". Исключение создано в результате перегрузки плеера. " +
								 " Рекомендуется увеличить размер фрагмента" + 
								 ", последний фрагмент : "  + fragment );
						
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					
					if ( bomb === true )
					{
						radFromMiddle = CheckAngle.goCheckAngle( new Point( xP, yP  ), true, pointMiddle);
						pDispers = Point.polar(Math.random() * distance, radFromMiddle);

					}
					else
					{
						pDispers = Point.polar(Math.random() * distance   , (Math.random() * (Math.PI * 3)));
					}

					pDispers.x +=  xP;
					pDispers.y +=  yP;

					fragment.x = pDispers.x;
					fragment.y = pDispers.y;

					arrFields.push( [pDispers, xP + rectShift.x, yP + rectShift.y, fragment, radFromMiddle ] );

					countFr++;
				}
				while ( yP + _sizeFragment < _bitData.height )

				arrColumns.push(arrFields);

			}
			while ( xP + _sizeFragment < _bitData.width )
			
			return [arrColumns, countFr];
		}
		
		public static function CreationVerticalArray(obj:BitmapData, size:uint, distance:uint, rectShift:Rectangle, bomb:Boolean):Array
		{
			_arrayFragments = new Array();
			_sizeFragment = size;
			_bitData = obj;
			
			var countFr:int;
			var fragment:Bitmap;
			var fragmentData:BitmapData;
			var rect:Rectangle = new Rectangle(  0, 0, _sizeFragment, _sizeFragment );
			var arrFields:Array;
			var arrColumns:Array = new Array();
			var xP:Number = -_sizeFragment;
			var yP:Number = _bitData.height;
			var pointMiddle:Point = new Point( _bitData.width / 2, _bitData.height / 2 );
			var radFromMiddle:Number;
			var pDispers:Point;

			///перебираем колонки
			do
			{
				
				if ( yP - _sizeFragment <= 0 ) rect.height = yP;
				yP -= rect.height;
				xP = - _sizeFragment;
				rect.width = _sizeFragment;
				arrFields = new Array();
				
				
			
				///перебираем строки
				do
				{
					xP += _sizeFragment;
					

					if ( xP + _sizeFragment > _bitData.width - 1 ) rect.width = _bitData.width - xP;

					rect.x = xP;
					rect.y = yP;
					
					try
					{
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
					}
					catch (e:Error)
					{
						
						throw new Error( e +
								", Размер фрагмента : " + rect + ". Исключение создано в результате перегрузки плеера. " +
								 " Рекомендуется увеличить размер фрагмента" + 
								 ", последний фрагмент : "  + fragment );
						fragmentData = new BitmapData(rect.width, rect.height, true, 0x00);
					
						fragmentData.copyPixels( _bitData, rect, new Point(0, 0), _bitData, new Point(xP, yP));
						fragment = new Bitmap( fragmentData );
						
						
					}
					if ( bomb === true )
					{
						radFromMiddle = CheckAngle.goCheckAngle( new Point( xP, yP  ), true, pointMiddle);
						pDispers = Point.polar(Math.random() * distance, radFromMiddle);
					}
					else
					{
						pDispers = Point.polar(Math.random() * (_bitData.width * 2.5 )   , (Math.random() * (Math.PI * 3)));
					}
					pDispers.x +=  xP;
					pDispers.y +=  yP;
					fragment.x = pDispers.x;
					fragment.y = pDispers.y;
					arrFields.push( [pDispers, xP + rectShift.x, yP + rectShift.y, fragment, radFromMiddle] );
					
					countFr++;
				}
				while ( xP + _sizeFragment < _bitData.width )

				arrColumns.push(arrFields);

			}
			while ( yP > 0 );
			
			
			return [arrColumns, countFr];
		}
		
		
		
		
		
	}

}>>>>>>> .r1349
